/**********************************************************************************************************
** 文件名: 		STM32F4_RTC_Driver.h
** 版本：  		1.0
** 工作环境: 	RealView MDK-ARM 5.11
** 作者: 		盖书永
** 生成日期: 	2014年11月17日19:26:43
** 功能:		时间日历的实现
** 相关文件:					
** 修改日志：	 
**********************************************************************************************************/
#ifndef  __STM32F4_RTC_DRIVER_H__
#define  __STM32F4_RTC_DRIVER_H__

typedef struct {
	unsigned short 	year;	
	unsigned char	month;
	unsigned char	day;
	unsigned char	hour;	
	unsigned char	minute;	
	unsigned char	second;
	unsigned char	weekday;	// 0：星期一 1：星期二 2：星期三 3：星期四 4：星期五 5：星期六 6:星期日
}Time_t;

extern unsigned int Start_Time;	//记录系统启动时的时间和日期

/**********************************************************************************************************
* 函数名称： void STM32F4_RTC_Init(void)
* 函数说明： RTC初始化
* 输入参数： 无
* 返回参数： 0：成功，1：失败
**********************************************************************************************************/
int STM32F4_RTC_Init(void);

/**********************************************************************************************************
* 函数名称： void STM32F4_WakeUp_Init(unsigned short second)
* 函数说明： 唤醒定时器配置，时间到后触发唤醒，同时PC13 开漏输出，极性输出1
* 输入参数： 唤醒时间周期,单位秒， 最大65536秒
* 返回参数： 无
**********************************************************************************************************/
void STM32F4_WakeUp_Init(unsigned short second);

/**********************************************************************************************************
* 函数名称： void STM32F4_RTC_ALARM_Init(int hour, int minute, int second)
* 函数说明： RTC 闹钟配置，时间到后触发闹钟，同时PC13 开漏输出，极性输出1
* 输入参数： 小时(0-23)，分(0-59)，秒(0-59) 
* 返回参数： 无
**********************************************************************************************************/
void STM32F4_RTC_ALARM_Init(int hour, int minute, int second);

/**********************************************************************************************************
* 函数名称:	 void Get_Current_Timedate(Time_t *timedate)
* 函数说明： 获取当前时间日期
* 输入参数： 时间日期结构体指针
* 返回参数： 无
**********************************************************************************************************/
void Get_Current_Timedate(Time_t *timedate);

/**********************************************************************************************************
* 函数名称:	 int Get_Current_TimedateStr(const char *format, char *string)
* 函数说明： 获取当前时间日期，以字符串形式输出
* 输入参数： 格式化方式（例如："%u-%02u-%02u %02u:%02u:%02u"），输出字符串缓存指针（至少20字节）
* 返回参数： 输出字符串长度
**********************************************************************************************************/
int Get_Current_TimedateStr(const char *format, char *string);

/**********************************************************************************************************
* 函数名称:	 unsigned int Get_Current_Timestamp(void)
* 函数说明： 获取当前时间戳，从1970年开始到现在的总秒数
* 输入参数： 无
* 返回参数： 时间戳
**********************************************************************************************************/
unsigned int Get_Current_Timestamp(void);

/**********************************************************************************************************
* 函数名称:	 void Timedate_Calibration(Time_t *timedate);
* 函数说明： 时间日期校准
* 输入参数： 时间日期结构体指针
* 返回参数： 0：成功，1：时间设置失败，2：日期设置失败
**********************************************************************************************************/
int Timedate_Calibration(Time_t *timedate);

/**********************************************************************************************************
* 函数名称:	 void Timedate_Calibration(char *string)
* 函数说明： 时间日期字符串校准
* 输入参数： 时间字符串，格式为 "YYYY-MM-DD HH:MM:SS"
* 返回参数： 无
**********************************************************************************************************/
void TimedateStr_Calibration(char *string);

/*******************************************************************************
* 函数名称:  void Get_weekday(Time_t * system_time)
* 函数说明： 获取星期
* 输入参数： 系统时间指针
* 返回参数： 0-6对应周一到周日
*******************************************************************************/
int Get_weekday(Time_t * system_time);

/**********************************************************************************************************
* 函数名称:	 void TimestampToTimedata(unsigned int Timestamp, Time_t * timedate)
* 函数说明： Unix时间戳转时间日期
* 输入参数： 从1970年开始到现在的总秒数 ， 时间日期结构体指针
* 返回参数： 无
**********************************************************************************************************/
void TimestampToTimedata(unsigned int Timestamp, Time_t * timedate);

/**********************************************************************************************************
* 函数名称:	 unsigned int TimedateToTimestamp(Time_t * timedate)
* 函数说明： 时间日期转时间戳
* 输入参数： 时间日期结构体指针
* 返回参数： 从1970年开始到现在的总秒数
**********************************************************************************************************/
unsigned int TimedateToTimestamp(Time_t * timedate);

#endif


